package edu.ort.services

import edu.ort.domain.Gasto;

class TagCloudService {

    static transactional = true

    // Devuelve un mapa de valores asociados a
    // las descriciones y su porcentaje de aparicion
    // (Descripcion, Porcentaje)
    //
    //  Nota: el porcentaje es un valor entre 0 y 1
    def getTagCloudMap() {
        def cantidadGastos = Gasto.count()
        // en caso de no haber datos de gastos la tagcloud está vacía
        if (cantidadGastos == 0) {
            return [:]
        }
        def resultado = Gasto.executeQuery("select descripcion, count(*) from Gasto group by descripcion order by UPPER(descripcion)")
        def resultadoPorcentaje = [:]
        for (tag in resultado) {
            resultadoPorcentaje[tag[0]] = (float) tag[1]/cantidadGastos
        }
        resultadoPorcentaje
    }
}
